package com.xxchat.service;

import java.util.List;

import com.xxchat.entity.dto.GroupInfoDTO;
import com.xxchat.entity.dto.TokenUserInfoDTO;
import com.xxchat.entity.enums.MessageTypeEnum;
import com.xxchat.entity.query.GroupInfoQuery;
import com.xxchat.entity.po.GroupInfo;
import com.xxchat.entity.vo.PaginationResultVO;
import org.springframework.web.multipart.MultipartFile;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;


/**
 * 群组信息表 业务接口
 */
public interface GroupInfoService {

	/**
	 * 根据条件查询列表
	 */
	List<GroupInfo> findListByParam(GroupInfoQuery param);

	/**
	 * 根据条件查询列表
	 */
	Integer findCountByParam(GroupInfoQuery param);

	/**
	 * 分页查询
	 */
	PaginationResultVO<GroupInfo> findListByPage(GroupInfoQuery param);

	/**
	 * 新增
	 */
	Integer add(GroupInfo bean);

	/**
	 * 批量新增
	 */
	Integer addBatch(List<GroupInfo> listBean);

	/**
	 * 批量新增/修改
	 */
	Integer addOrUpdateBatch(List<GroupInfo> listBean);

	/**
	 * 多条件更新
	 */
	Integer updateByParam(GroupInfo bean,GroupInfoQuery param);

	/**
	 * 多条件删除
	 */
	Integer deleteByParam(GroupInfoQuery param);

	/**
	 * 根据GroupId查询对象
	 */
	GroupInfo getGroupInfoByGroupId(String groupId);


	/**
	 * 根据GroupId修改
	 */
	Integer updateGroupInfoByGroupId(GroupInfo bean,String groupId);


	/**
	 * 根据GroupId删除
	 */
	Integer deleteGroupInfoByGroupId(String groupId);

	void saveGroup(GroupInfo groupInfo, MultipartFile avatarFile, MultipartFile avatarCover);

    GroupInfo getGroupInfo(String groupId, TokenUserInfoDTO userInfoDTO);

	GroupInfoDTO getGroupInfo4Chat(String groupId, TokenUserInfoDTO userInfoDTO);

	PaginationResultVO<GroupInfo> loadGroupList(Integer pageSize, Integer pageNum);

	void forceDisbandGroup(String groupId);

	void disbandGroup(String groupOwnerId, String groupId);

	void leaveGroup(String contactId, String groupId, MessageTypeEnum messageTypeEnum);

    void addOrRemoveGroupMember(TokenUserInfoDTO userInfoDTO, String groupId, String memberIds, Integer action);
}